package br.com.usapre.faces;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.model.SelectItem;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import br.com.business.ParceiroBusiness;
import br.com.data.Parceiro;
import br.com.login.faces.SessionUsaPreBean;
import br.com.utilidades.database.data.Criterio;
import br.com.utilidades.faces.SimpleMessageBean;

/**
 * @version 1.0.0
 * @since Fevereiro,28 2013
 * @author Eduardo Francisco Barbosa
 */
@Component
@Scope("view")
public class LiberacaoLojistaBean extends SimpleMessageBean implements Serializable {

    private static final long serialVersionUID = 5103337498138083114L;

    private SessionUsaPreBean sessionUsaPreBean;

    private ParceiroBusiness parceiroBusiness;

    private Parceiro parceiroLogado;

    private List<Parceiro> parceiros;
    private Parceiro parceiroEscolhido;

    private String nome;
    private String cpf;

    private List<SelectItem> opcoes;
    private String opcaoEscolhida;

    /**
     * Construtor
     */
    @Autowired
    public LiberacaoLojistaBean(SessionUsaPreBean sessionUsaPreBean, ParceiroBusiness parceiroBusiness) {

	this.sessionUsaPreBean = sessionUsaPreBean;

	this.parceiroBusiness = parceiroBusiness;

	parceiroLogado = this.sessionUsaPreBean.getParceiro();

	reset();
    }

    /**
     * reset
     */
    public void reset() {

	opcoes = new ArrayList<SelectItem>();

	opcoes.add(new SelectItem("0", "Todos"));
	opcoes.add(new SelectItem("1", "Preenchendo Dados"));
	opcoes.add(new SelectItem("2", "Aguardando Liberação"));
	opcoes.add(new SelectItem("3", "Liberado"));

	opcaoEscolhida = "";

	nome = "";
	cpf = "";

	buscar();

    }

    /**
     * buscar
     */
    public void buscar() {

	List<Criterio> criterios = new ArrayList<Criterio>();

	if (nome.equals("")) {

	} else {
	    Criterio criterio = new Criterio();

	    criterio.setCampo("nome");
	    criterio.setComparacao("like");
	    criterio.setTipo(Criterio.TIPO_STRING_NOT_CASE_SENSITIVE);
	    criterio.setValue("%" + nome + "%");

	    criterios.add(criterio);
	}

	if (cpf.equals("")) {

	} else {
	    Criterio criterio = new Criterio();

	    criterio.setCampo("cpfCnpj");
	    criterio.setComparacao("like");
	    criterio.setTipo(Criterio.TIPO_STRING_NOT_CASE_SENSITIVE);
	    criterio.setValue("%" + cpf + "%");

	    criterios.add(criterio);
	}

	if (opcaoEscolhida.equals("") || opcaoEscolhida.equals("0")) {

	} else {
	    Integer opcao = Integer.parseInt(opcaoEscolhida);

	    Criterio criterio = new Criterio();

	    criterio.setCampo("statusCredenciamento");
	    criterio.setTipo(Criterio.TIPO_INTEGER);

	    if (opcao == 1) {
		criterio.setValue(3);
		criterio.setComparacao("<=");
	    }
	    if (opcao == 2) {
		criterio.setValue(4);
		criterio.setComparacao("=");
	    }
	    if (opcao == 3) {
		criterio.setValue(5);
		criterio.setComparacao("=");
	    }

	    criterios.add(criterio);

	}

	parceiros = parceiroBusiness.buscarPorCriterios(criterios, "");

    }

    /**
     * autorizar
     */
    public void autorizar() {

	parceiroEscolhido.setStatusCredenciamento(5);
	parceiroBusiness.atualizar(parceiroEscolhido);

	buscar();
    }

    // SETS AND GETS
    public List<Parceiro> getParceiros() {
	return parceiros;
    }

    public void setParceiros(List<Parceiro> parceiros) {
	this.parceiros = parceiros;
    }

    public String getNome() {
	return nome;
    }

    public void setNome(String nome) {
	this.nome = nome;
    }

    public String getCpf() {
	return cpf;
    }

    public void setCpf(String cpf) {
	this.cpf = cpf;
    }

    public List<SelectItem> getOpcoes() {
	return opcoes;
    }

    public void setOpcoes(List<SelectItem> opcoes) {
	this.opcoes = opcoes;
    }

    public String getOpcaoEscolhida() {
	return opcaoEscolhida;
    }

    public void setOpcaoEscolhida(String opcaoEscolhida) {
	this.opcaoEscolhida = opcaoEscolhida;
    }

    public Parceiro getParceiroLogado() {
	return parceiroLogado;
    }

    public void setParceiroLogado(Parceiro parceiroLogado) {
	this.parceiroLogado = parceiroLogado;
    }

    public Parceiro getParceiroEscolhido() {
	return parceiroEscolhido;
    }

    public void setParceiroEscolhido(Parceiro parceiroEscolhido) {
	this.parceiroEscolhido = parceiroEscolhido;
    }
}